package ocio.actions;  

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import ocio.services.ClienteService;
import ocio.services.ServiceLocator;
import ocio.services.UsuarioService;
import ocio.beans.Cliente;
import ocio.beans.Usuario;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * Clase destinataria de petición de alta de un nuevo cliente.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Cliente
 */
public class AddClienteAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	private String correo;
	private String password;
	private String passwordbis;
	private int rol;
	private String nombre;
	private String telefono;
	private List<Cliente> listaClientes = new ArrayList<Cliente>();
	private String mensaje="";
	
    /**
	 * Método execute() de la clase ActionSupport de Struts 2
	 * Comprueba que el usuario no está dado de alta y solicita las servicios para dar de alta el nuevo cliente
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario
	 */
	public String execute(){
		
		this.setRol(2); //El rol de cliente es 2.
			
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ClienteService clienteService = (ClienteService)serviceLocator.getService("Cliente");		
		UsuarioService usuarioService = (UsuarioService)serviceLocator.getService("Usuario");
		
		Usuario usuAux = new Usuario();
		usuAux.setCorreo(this.correo);
		if (usuarioService.searchByFields(usuAux).size()==0) {
 		       clienteService.add(this);
 			   this.listaClientes=clienteService.ListAllClients();

 				Map<String,Object> sesion = ActionContext.getContext().getSession();
 				if (sesion.get("ROL")=="Anonimo") { //vuelve a main para que el nuevo cliente se loguee
 					mensaje="Has sido dado de alta como cliente. Ya puedes usar la opción de 'Conectar' para ver tu cuenta";
 					return "logearse";
 				} else { //El alta la ha hecho el admin, vuelve a la lista de clientes
 					return "success";
 				}
		} else {       
				mensaje="Ya existe un usuario con ese correo electrónico";
				return "input";
		}
		
	}

	/**
	 * Método getter.         
	 * @return nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * Método setter.         
	 * @param nombre
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * Método getter.         
	 * @return correo
	 */
	public String getCorreo() {
		return correo;
	}

	/**
	 * Método setter.         
	 * @param correo
	 */
	public void setCorreo(String correo) {
		this.correo = correo;
	}

	/**
	 * Método getter.         
	 * @return rol
	 */	
	public int getRol(){
		return rol;
	}

	/**
	 * Método setter.         
	 * @param rol
	 */
	public void setRol(int rol){
		this.rol=rol;
	}

	/**
	 * Método getter.         
	 * @return passwordbis
	 */
	public String getPasswordbis() {
		return passwordbis;
	}

	/**
	 * Método setter.         
	 * @param passwordbis
	 */
	public void setPasswordbis(String passwordbis) {
		this.passwordbis = passwordbis;
	}

	/**
	 * Método getter.         
	 * @return password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * Método setter.         
	 * @param password
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	
	/**
	 * Método getter.         
	 * @return telefono
	 */
	public String getTelefono() {
		return telefono;
	}

	/**
	 * Método setter.         
	 * @param telefono
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	
	/**
	 * Método getter.         
	 * @return listaClientes;
	 */	
	public List<Cliente> getListaClientes() {
		return listaClientes;
	}

	/**
	 * Método setter.         
	 * @param listaClientes
	 */
	public void setListaClientes(List<Cliente> listaClientes) {
		this.listaClientes = listaClientes;
	}

	/**
	 * Método getter.         
	 * @return mensaje
	 */
	public String getMensaje() {
		return mensaje;
	}

	/**
	 * Método setter.         
	 * @param mensaje
	 */
	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}
}
